# from flask import Flask
# #实例化一个Flask对象，这个对象就是我们提供的网站内容。网站的所有东西都需要放在app对象中
# #通过Flask类实例化得到的app，就是我们的核心对象
#
# app = Flask(__name__)
#
#动态路由的作用：用来传递url参数



# #添加路由   url--视图函数
# @app.route('/')
# def index():
#     return 'this is index'
from urllib import request

# app.run()   #启动app应用，只适合开发过程中使用，线上生产环境要使用专门的wsgi server 启动app


#WSGI是什么？   python web server gateway interface
#python web服务网关接口


#专门的wsgi 服务器 来跑python web应用
#用专门的python专注与生成网页内容入html文档，而不希望接触到tcp连接，http原始请求和响应格式等
#那就使用专门的web服务器去运行python应用框架
#gunicorn  or uwsgi
#guncorn server:app --bind '0.0.0.0:8000'


# from flask import Flask
#
# app = Flask(__name__)
#
#
# @app.route('/')
# def index():
#     return 'this is index'
#
# @app.route('/hello')
# def hello():
#     return 'hello world!'
#
# app.add_url_rule('/hello',view_func=hello,endpoint='hello')
#
#
# @app.route("/student/<username>/<userage>")
# def student(username,userage):
#     return f"Hello {username}, age is {userage}"
#
#
# app.run()


#
# from flask import Flask
#
# app=Flask(__name__)
#
# @app.route("/login/<username>/<password>")
# def index(username,password):
#
#     if username == "root" and password == "123456":
#         return '登陆成功'
#     return '登陆失败'
# app.run()


#请求和响应
#请求
#获取客户端请求的时携带的数据
#获得客户端请求时的头部数据
#flask中客户端请求的所有数据都封装在一个对象中  request对象
#arg

# from flask import Flask,request
#
# app = Flask(__name__)
#
# @app.route('/login', methods=['POST','GET'])
# def login():
    # print(dir(request))
    # print(request.args)
    # print(request.args.get("name"))
    # print(request.args.get("passwd"))

    # 通过json格式传递数据
    # print(request.json.get("name"))
    # print(request.json.get("passwd"))

    # print(request.form.get("name"))
    # print(request.form.get("passwd"))


#     print(request.url)
#     print(request.path)
#     print(request.headers)
#     print(request.method)
#     return 'Hello World!'
#
#
# app.run(debug=True)

#api响应
# from flask import Flask
# #标准化返回
# from lib.resp import responseFunc
# app = Flask(__name__)
# @app.route("/")
# def register():
#     return responseFunc()
#
# if __name__ == "__main__":
#     app.run(debug=True)


#一般来说，返回的都是json格式的字符串
#包含三个字段：code    data    message

# from flask import Flask,request
# #标准化返回
# from lib.resp import responseFunc
# app = Flask(__name__)
# @app.route("/login", methods=["GET", "POST"])
# def login():
#     username = request.json.get("username")
#     passwd = request.json.get("passwd")
#
#     if username == "root" and passwd == "123456":
#         return responseFunc(data ="yes", message = "success!",code = 200)
#     else:
#         return responseFunc(data ="no", message = "error!")
# # app.add_url_rule("/register", view_func=register)
# # if __name__ == "__main__":
# app.run(debug=True)


#flask 路由管理
#flask 路由管理通过核心对象中的url_map和view_functions属性去管理路由
#     url_map保存url和endpoint的映射关系
#     view_functions中保存的是endpoint和functions的映射关系
#当客户端请求过来时，现在url_map表中通过客户端请求的url老查找相应的url和endpoint的映射关系
#周到endpoint后，再去view_functions中查找相应的视图函数处理请求
#endpoint 没有被指定时，默认就拿去视图函数的名字作为endpoint的名字
#endpoint全局唯一，不能重复

#非前后端分离
# from flask import Flask,render_template,request
#
# app = Flask(__name__)
#
# @app.route('/')
# def index():
#     #render_template    页面渲染函数
#     return render_template("index.html")
#
#
#
# @app.route("/login")
# def login():
#     # username = request.args["username"]
#     # password = request.args["password"]
#     # print(username, password)
#     name = 'giao'
#
#     return render_template("login.html",name=name)
#
# app.run(debug=True)


#web开发软件设计模式
#1.mvc
#m model(模型)    负责数据处理
#v view(视图)     用户界面展示
#c controller     负责接收请求，转发处理

#2.mtv
#flask 采用的也是该模式
#Model（模型）
#Template（模板）
#View（视图）



#项目的拆分
#1,所有的东西都要和核心对象绑定
#2,从程序入口开始，要运行到每个文件

